home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / WarpQuake / Src / gl_test.c < prev    next >
C/C++ Source or Header  |  2000-05-22  |  4KB  |  183 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20.  
  21. #include "quakedef.h"
  22.  
  23. #ifdef GLTEST
  24.  
  25. typedef struct
  26. {
  27.     plane_t    *plane;
  28.     vec3_t    origin;
  29.     vec3_t    normal;
  30.     vec3_t    up;
  31.     vec3_t    right;
  32.     vec3_t    reflect;
  33.     float    length;
  34. } puff_t;
  35.  
  36. #define    MAX_PUFFS    64
  37.  
  38. puff_t    puffs[MAX_PUFFS];
  39.  
  40.  
  41. void Test_Init (void)
  42. {
  43. }
  44.  
  45.  
  46.  
  47. plane_t    junk;
  48. plane_t    *HitPlane (vec3_t start, vec3_t end)
  49. {
  50.     trace_t        trace;
  51.  
  52. // fill in a default trace
  53.     memset (&trace, 0, sizeof(trace_t));
  54.     trace.fraction = 1;
  55.     trace.allsolid = true;
  56.     VectorCopy (end, trace.endpos);
  57.  
  58.     SV_RecursiveHullCheck (cl.worldmodel->hulls, 0, 0, 1, start, end, &trace);
  59.  
  60.     junk = trace.plane;
  61.     return &junk;
  62. }
  63.  
  64. void Test_Spawn (vec3_t origin)
  65. {
  66.     int        i;
  67.     puff_t    *p;
  68.     vec3_t    temp;
  69.     vec3_t    normal;
  70.     vec3_t    incoming;
  71.     plane_t    *plane;
  72.     float    d;
  73.  
  74.     for (i=0,p=puffs ; i<MAX_PUFFS ; i++,p++)
  75.     {
  76.         if (p->length <= 0)
  77.             break;
  78.     }
  79.     if (i == MAX_PUFFS)
  80.         return;
  81.  
  82.     VectorSubtract (r_refdef.vieworg, origin, incoming);
  83.     VectorSubtract (origin, incoming, temp);
  84.     plane = HitPlane (r_refdef.vieworg, temp);
  85.  
  86.     VectorNormalize (incoming);
  87.     d = DotProduct (incoming, plane->normal);
  88.     VectorSubtract (vec3_origin, incoming, p->reflect);
  89.     VectorMA (p->reflect, d*2, plane->normal, p->reflect);
  90.  
  91.     VectorCopy (origin, p->origin);
  92.     VectorCopy (plane->normal, p->normal);
  93.  
  94.     CrossProduct (incoming, p->normal, p->up);
  95.  
  96.     CrossProduct (p->up, p->normal, p->right);
  97.  
  98.     p->length = 8;
  99. }
  100.  
  101. void DrawPuff (puff_t *p)
  102. {
  103.     vec3_t    pts[2][3];
  104.     int        i, j;
  105.     float    s, d;
  106.  
  107.     for (i=0 ; i<2 ; i++)
  108.     {
  109.         if (i == 1)
  110.         {
  111.             s = 6;
  112.             d = p->length;
  113.         }
  114.         else
  115.         {
  116.             s = 2;
  117.             d = 0;
  118.         }
  119.  
  120.         for (j=0 ; j<3 ; j++)
  121.         {
  122.             pts[i][0][j] = p->origin[j] + p->up[j]*s + p->reflect[j]*d;
  123.             pts[i][1][j] = p->origin[j] + p->right[j]*s + p->reflect[j]*d;
  124.             pts[i][2][j] = p->origin[j] + -p->right[j]*s + p->reflect[j]*d;
  125.         }
  126.     }
  127.  
  128.     glColor3f (1, 0, 0);
  129.  
  130. #if 0
  131.     glBegin (GL_LINES);
  132.     glVertex3fv (p->origin);
  133.     glVertex3f (p->origin[0] + p->length*p->reflect[0],
  134.         p->origin[1] + p->length*p->reflect[1],
  135.         p->origin[2] + p->length*p->reflect[2]);
  136.  
  137.     glVertex3fv (pts[0][0]);
  138.     glVertex3fv (pts[1][0]);
  139.  
  140.     glVertex3fv (pts[0][1]);
  141.     glVertex3fv (pts[1][1]);
  142.  
  143.     glVertex3fv (pts[0][2]);
  144.     glVertex3fv (pts[1][2]);
  145.  
  146.     glEnd ();
  147. #endif
  148.  
  149.     glBegin (GL_QUADS);
  150.     for (i=0 ; i<3 ; i++)
  151.     {
  152.         j = (i+1)%3;
  153.         glVertex3fv (pts[0][j]);
  154.         glVertex3fv (pts[1][j]);
  155.         glVertex3fv (pts[1][i]);
  156.         glVertex3fv (pts[0][i]);
  157.     }
  158.     glEnd ();
  159.  
  160.     glBegin (GL_TRIANGLES);
  161.     glVertex3fv (pts[1][0]);
  162.     glVertex3fv (pts[1][1]);
  163.     glVertex3fv (pts[1][2]);
  164.     glEnd ();
  165.  
  166.     p->length -= host_frametime*2;
  167. }
  168.  
  169.  
  170. void Test_Draw (void)
  171. {
  172.     int        i;
  173.     puff_t    *p;
  174.  
  175.     for (i=0, p=puffs ; i<MAX_PUFFS ; i++,p++)
  176.     {
  177.         if (p->length > 0)
  178.             DrawPuff (p);
  179.     }
  180. }
  181.  
  182. #endif
  183.